<?php
  
  require_once 'ExtratorFilmes.php';
  require_once 'ExtratorFilmesPaginaUnica.php';
  require_once 'FiltroTags.php';
  
/**
 * Classe responsável pela implementação do Crawler, contendo
 * métodos básicos para a realização dessa tarefa.
 *
 * @author tsalles
 * @copyright 2008
 */

class CrawlerIMDB {
    // VARIÁVEIS
    private $tagGenero = "tgenre=";
    private $tagAno = "tyear=";
    
    private $tratarUnicaPagina = "false";
    
    // Aqui, armazeno os valores da consulta !
    private $genero;
    private $titulo;
    private $ano;
    
    private $sementes; // urls de partida para o crawler
	private $filmes;   // armazena a lista de filmes
	private $query;
	
    // CONSTRUTOR
    function CrawlerIMDB() {
        $this->sementes = array();
        $this->filmes = array();
    }
    
   /*********************************************************
    * FUNÇÕES PRIVADAS
    *********************************************************/
    
   /**
    * Obtém o documento, através da url (biblioteca cURL))
    */
    private function recuperarConteudoViaURL($url) {

         $handle = @fopen ($url, "r");
         if ($handle === false) {echo "PAU !"; return false;}
         $buffer = "";
         while (!feof ($handle)) {
             $buffer .= fgets($handle, 4096);
         }
         fclose ($handle);
         return $buffer;
   }
    
   /**
    * Faz o crawling partindo da URL passada como parâmetro.
    * São obtidos os links presentes na página, atualizando
    * as informações pertinentes no banco (hora da visita, 
    * referências, etc). Retorna as urls obtidas.
    */
	private function varreURL($url) {
	    $res = $this->recuperarConteudoViaURL($url);
	    if ($res == false) {
            // PROBLEMA !
            return false;
        }
        if (strcasecmp($this->tratarUnicaPagina, "false") === 0) {
          $extratorFilmes = new ExtratorFilmes();
        }
        else{
           $extratorFilmes = new ExtratorFilmesPaginaUnica(); 
        }

        $extratorFilmes->filtrarDocumento($res);
        
        return $extratorFilmes->obtemElementosFiltrados();
    }
	
    // FUNÇÕES PÚBLICAS
    public function adicionaSemente($url) {
      array_push($sementes, $url);
    }
    
    // Inicia o crawling, partindo das URL's sementes
    // http://www.imdb.com/find?q=rambo;s=tt;tgenre=Action
    public function inicia($q) {
        
        $this->query = str_replace(" ", "+", rtrim($q));
        $res = $this->varreURL("http://www.imdb.com/find?" . "q=" . $this->query . ";s=tt;" .
                                                             $this->tagAno . $this->ano . ";" .
                                                             $this->tagGenero . $this->genero);
        if (!$res) {
            return false; // falha.
        }
        else {
            // A lista de filmes foi obtida !
            $this->filmes = $res; 
            return true;
        }
    }
    
    public function obtemFilmes() {
        return $this->filmes;
    }
    
    public function setGenero($g) {
        $this->genero = $g;
    }
    
    public function setAno($a) {
        $this->ano = $a;
    }
    
    public function setTratarUnicaPagina($bool) {
        $this->tratarUnicaPagina = $bool;
    }
}

?>